package com.playtruly.wanzhende2025.push

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.util.Log
import cn.jpush.android.api.JPushInterface
import org.json.JSONException
import org.json.JSONObject

/**
 * 🔔 极光推送自定义消息接收器
 * 处理推送消息的接收、通知点击等事件
 */
class JPushReceiver : BroadcastReceiver() {
    
    companion object {
        private const val TAG = "JPushReceiver"
    }

    override fun onReceive(context: Context?, intent: Intent?) {
        if (context == null || intent == null) {
            Log.w(TAG, "⚠️ Context或Intent为空")
            return
        }

        val bundle = intent.extras
        if (bundle == null) {
            Log.w(TAG, "⚠️ Intent extras为空")
            return
        }

        val action = intent.action
        Log.d(TAG, "🔔 收到极光推送事件: $action")

        when (action) {
            JPushInterface.ACTION_REGISTRATION_ID -> {
                // 注册成功
                val regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID)
                Log.d(TAG, "✅ 极光推送注册成功, Registration ID: $regId")
                
                // 可以在这里将Registration ID发送到服务器
                regId?.let {
                    saveRegistrationId(context, it)
                }
            }

            JPushInterface.ACTION_MESSAGE_RECEIVED -> {
                // 收到自定义消息
                val message = bundle.getString(JPushInterface.EXTRA_MESSAGE)
                val extras = bundle.getString(JPushInterface.EXTRA_EXTRA)
                
                Log.d(TAG, "📨 收到自定义消息: $message")
                Log.d(TAG, "📨 消息附加字段: $extras")
                
                handleCustomMessage(context, message, extras)
            }

            JPushInterface.ACTION_NOTIFICATION_RECEIVED -> {
                // 收到通知
                val title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE)
                val content = bundle.getString(JPushInterface.EXTRA_ALERT)
                val extras = bundle.getString(JPushInterface.EXTRA_EXTRA)
                
                Log.d(TAG, "🔔 收到通知: 标题=$title, 内容=$content")
                Log.d(TAG, "🔔 通知附加字段: $extras")
            }

            JPushInterface.ACTION_NOTIFICATION_OPENED -> {
                // 用户点击了通知
                val title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE)
                val content = bundle.getString(JPushInterface.EXTRA_ALERT)
                val extras = bundle.getString(JPushInterface.EXTRA_EXTRA)
                
                Log.d(TAG, "👆 用户点击通知: 标题=$title, 内容=$content")
                Log.d(TAG, "👆 通知附加字段: $extras")
                
                handleNotificationClick(context, title, content, extras)
            }

            JPushInterface.ACTION_CONNECTION_CHANGE -> {
                // 连接状态变化
                val connected = JPushInterface.getConnectionState(context)
                Log.d(TAG, "🔗 极光推送连接状态变化: 已连接=$connected")
            }

            else -> {
                Log.d(TAG, "🔔 未处理的极光推送事件: $action")
            }
        }
    }

    /**
     * 保存Registration ID到本地
     */
    private fun saveRegistrationId(context: Context, regId: String) {
        try {
            val prefs = context.getSharedPreferences("jpush_prefs", Context.MODE_PRIVATE)
            prefs.edit().putString("registration_id", regId).apply()
            Log.d(TAG, "✅ Registration ID已保存到本地: $regId")
        } catch (e: Exception) {
            Log.e(TAG, "❌ 保存Registration ID失败", e)
        }
    }

    /**
     * 处理自定义消息
     */
    private fun handleCustomMessage(context: Context, message: String?, extras: String?) {
        try {
            // 解析自定义消息，可以根据业务需求处理
            message?.let {
                Log.d(TAG, "📨 处理自定义消息: $it")
                
                // 可以在这里发送到Flutter层
                // 通过EventChannel或MethodChannel与Flutter通信
            }
            
            extras?.let {
                val extrasJson = JSONObject(it)
                Log.d(TAG, "📨 消息扩展字段: $extrasJson")
            }
        } catch (e: JSONException) {
            Log.e(TAG, "❌ 解析自定义消息失败", e)
        }
    }

    /**
     * 处理通知点击
     */
    private fun handleNotificationClick(context: Context, title: String?, content: String?, extras: String?) {
        try {
            Log.d(TAG, "👆 处理通知点击")
            
            // 可以在这里根据通知内容跳转到指定页面
            // 或者将点击事件发送到Flutter层
            
            extras?.let {
                val extrasJson = JSONObject(it)
                Log.d(TAG, "👆 通知扩展字段: $extrasJson")
                
                // 根据扩展字段决定跳转逻辑
                val targetPage = extrasJson.optString("target_page")
                if (targetPage.isNotEmpty()) {
                    Log.d(TAG, "👆 目标页面: $targetPage")
                    // 这里可以实现页面跳转逻辑
                }
            }
        } catch (e: JSONException) {
            Log.e(TAG, "❌ 处理通知点击失败", e)
        }
    }
}
